class_name PlayArea
extends Node2D
## 版本：1.0.0
## 功能：构成由游戏地图、单元网格构成的一个游戏性区域
## 使用：挂载到 Node2D 节点上，作为游戏性区域的父节点，配置 play_area_map 和 unit_grid 导出变量。
## 注意：请确保 PlayArea 节点是正确的位置，而 TileMapLayer 可以是原点
## 前置：UnitGrid

## 游戏性区域的瓦片地图
@export var play_area_map: TileMapLayer

## 游戏性区域的单元网格
@export var unit_grid: UnitGrid


func add_unit_to_empty_cell(unit: Unit, cell_position: Vector2i) -> bool:
	if not unit_grid.add_unit_to_empty_cell(unit, cell_position):
		return false
	
	# 将单元布置在地图中
	unit.global_position = get_world_global_position_from_cell_position(cell_position) - Arena.HALF_CELL_SIZE
	return true


func add_unit_to_first_empty_cell(unit: Unit) -> bool:
	if not unit_grid.has_empty_cell():
		return false
	
	return add_unit_to_empty_cell(unit, unit_grid.get_first_empty_cell_position())


func remove_unit_from_cell_position(cell_position: Vector2i) -> bool:
	return unit_grid.remove_unit_from_cell_position(cell_position)


func remove_unit(unit: Node) -> bool:
	return unit_grid.remove_unit(unit)


func get_world_global_position_from_cell_position(cell_position: Vector2i) -> Vector2:
	return to_global(play_area_map.map_to_local(cell_position))


func get_cell_position_from_world_global_position(world_global_position: Vector2) -> Vector2i:
	return play_area_map.local_to_map(to_local(world_global_position))
